special object, handles __FILE__ __LINE__ __COUNTER__ __DATE__ __TIME__ macros
# File metasm/preprocessor.rb, line 325 def initialize(raw) @name = Token.new(nil) @name.type = :string @name.raw = raw end
# File metasm/preprocessor.rb, line 331 def apply(lexer, name, emptyarglist, toklist=nil) tok = @name.dup tok.expanded_from = name.expanded_from.to_a + [name] case @name.raw when '__FILE__', '__DATE__', '__TIME__' # returns a :quoted tok.type = :quoted tok.value = case @name.raw when '__FILE__' name = name.expanded_from.first if name.expanded_from name.backtrace.to_a[-2].to_s when '__DATE__'; Time.now.strftime('%b %e %Y') when '__TIME__'; Time.now.strftime('%H:%M:%S') end tok.raw = tok.value.inspect when '__LINE__', '__COUNTER__' # returns a :string tok.type = :string case @name.raw when '__LINE__' name = name.expanded_from.first if name.expanded_from tok.value = name.backtrace.to_a[-1] when '__COUNTER__' tok.value = @counter ||= 0 @counter += 1 end tok.raw = tok.value.to_s else raise name, 'internal error' end [tok] end
# File metasm/preprocessor.rb, line 321 def args ; end
# File metasm/preprocessor.rb, line 322 def body ; [@name] end