Class: ParseC::Function

Inherits:
Object
  • Object
show all
Defined in:
lib/parsec.rb

Overview

Defined function.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, variadic = false) ⇒ Function

Initialize function object. Default return type to void.

Parameters:

  • name (String)

    Func name.



249
250
251
252
253
254
# File 'lib/parsec.rb', line 249

def initialize( name, variadic = false )
    @name = name
    @variadic = variadic
    @args = {}
    @returnType = 'void'
end

Instance Attribute Details

#nameObject (readonly)

Func name.



240
241
242
# File 'lib/parsec.rb', line 240

def name
  @name
end

#variadicObject (readonly)

Variadic (end with ellipsis).



243
244
245
# File 'lib/parsec.rb', line 243

def variadic
  @variadic
end

Instance Method Details

#addArgument(name, type) ⇒ Object

Add argument to functions argument list.



264
265
266
# File 'lib/parsec.rb', line 264

def addArgument( name, type )
    @args[ name ] = type
end

#argDecl(name) ⇒ Object

Get argument declarations String presentation.



284
285
286
287
288
289
290
291
292
# File 'lib/parsec.rb', line 284

def argDecl( name )
    if name
        # Has type.
        "#{@args[ name ]} #{name}"
    else
        # Void/variadic.
        @args[ name ]
    end
end

#declarationObject

Return functions declation as String.



296
297
298
# File 'lib/parsec.rb', line 296

def declaration
    "#{@returnType} #{@name}( #{(@args.keys.map { |k| argDecl(k) }).join(', ')} );"
end

#doneObject

Close function defition. If argument list is empty, then arg list contains only void.



271
272
273
274
275
276
277
278
279
280
# File 'lib/parsec.rb', line 271

def done
    if @variadic
        @args[ nil ] = '...'
    end

    if @args.empty?
        @args = { nil => 'void' }
    end
    self
end

#setReturnType(type) ⇒ Object

Set function return type.



258
259
260
# File 'lib/parsec.rb', line 258

def setReturnType( type )
    @returnType = type
end