Class: Cfruby::Cfp_Compile

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

Instance Method Summary collapse

Constructor Details

#initialize(cf, parser = nil) ⇒ Cfp_Compile

Returns a new instance of Cfp_Compile.



14
15
16
17
# File 'lib/libcfenjin/cfp_compile.rb', line 14

def initialize cf,parser=nil
	@cf = cf
	@parser = parser
end

Instance Method Details

#do_compile(code, do_eval = true) ⇒ Object

Takes a piece of code and compiles it - after successful compilation the code-snippet is ready for execution. When do_eval is false the actual evaluation is omitted (no error checking!)



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/libcfenjin/cfp_compile.rb', line 23

def do_compile code, do_eval=true
	@cf.cfp_logger.trace TRACE_ENGINE,"Compiling #{code.fn} action #{code.action}"
	begin
		# Translate Cfruby style code into plain Ruby
		translator = Cfp_Translate.new(@cf,@parser)
		# Translate conditional blocks
		lines = translator.conditionals(code)
		# Line by line translation, depending on function - i.e. control, files, tidy etc.
		translated_lines = []
		# code.each do | line,num |
		lines.each do | line |
			translated_lines.push translator.do_translate(code.action,line)
		end
		# Encapsulate teh code into a class object
		buf = code.encapsulate(translated_lines).join("\n")
		@cf.cfp_logger.trace TRACE_ALL,buf
		eval buf if do_eval
	rescue SyntaxError, RuntimeError
		msg = 'ERROR cfscript ',code.fn," line #{code.linenum} - #{$!}\n"
		code.dump
		@cf.cfp_logger.error LOG_CRIT,msg,'cfruby'
		raise
	end
	buf
end

#dump_compiled(code) ⇒ Object

Dump parsed and compiled code (100% Ruby)



50
51
52
53
# File 'lib/libcfenjin/cfp_compile.rb', line 50

def dump_compiled code
	buf = do_compile code,false
	print buf,"\n"
end