49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
|  | #!/usr/bin/perl | ||
|  | # | ||
|  | 
 | ||
|  | package S2::Compiler; | ||
|  | 
 | ||
|  | use strict; | ||
|  | use S2::Tokenizer; | ||
|  | use S2::Checker; | ||
|  | use S2::Layer; | ||
|  | use S2::Util; | ||
|  | use S2::BackendPerl; | ||
|  | use S2::BackendHTML; | ||
|  | use S2::OutputScalar; | ||
|  | 
 | ||
|  | sub new # (fh) class method | ||
|  | { | ||
|  |     my ($class, $opts) = @_; | ||
|  |     $opts->{'checker'} ||= new S2::Checker; | ||
|  |     bless $opts, $class; | ||
|  | } | ||
|  | 
 | ||
|  | sub compile_source { | ||
|  |     my ($this, $opts) = @_; | ||
|  |     $S2::CUR_COMPILER = $this; | ||
|  |     my $ref = ref $opts->{'source'} ? $opts->{'source'} : \$opts->{'source'}; | ||
|  |     my $toker = S2::Tokenizer->new($ref); | ||
|  |     my $s2l = S2::Layer->new($toker, $opts->{'type'}); | ||
|  |     my $o = new S2::OutputScalar($opts->{'output'}); | ||
|  |     my $be; | ||
|  |     $opts->{'format'} ||= "perl"; | ||
|  |     if ($opts->{'format'} eq "html") { | ||
|  |         $be = new S2::BackendHTML($s2l); | ||
|  |     } elsif ($opts->{'format'} eq "perl") { | ||
|  |         $this->{'checker'}->checkLayer($s2l); | ||
|  |         $be = new S2::BackendPerl($s2l, $opts->{'layerid'}, $opts->{'untrusted'}); | ||
|  |         if ($opts->{'builtinPackage'}) { | ||
|  |             $be->setBuiltinPackage($opts->{'builtinPackage'}); | ||
|  |         } | ||
|  |     } else { | ||
|  | 	S2::error("Unknown output type in S2::Compiler"); | ||
|  |     } | ||
|  |     $be->output($o); | ||
|  |     undef $S2::CUR_COMPILER; | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 1; |