コード例 #1
0
ファイル: compiler.js プロジェクト: roadlabs/eisa
	var compile = exports.compile = function (ast, source) {
		var getSource = function(){
			var a = source.split('\n');
			var remap = [0];
			a.forEach(function(s){
				remap.push(remap[remap.length - 1] + s.length + 1)
			});

			var mins = 0

			return function(s, t){
				for(var i = mins; i < remap.length; i++) if(remap[i] > s)
					for(var j = i; i < remap.length; j++) if(remap[j] > t) {
						mins = j + 1;
						return source.slice(remap[i - 1], remap[j]).replace(/\s+$/, '')
					};
				return ''
			}
		}()

		var trees = ast.scopes;
		var enter = trees[0];

		var enterText = "var undefined;\n" + function(){
			var s = '';
			for(var item in eisa.runtime) if(OWNS(eisa.runtime, item)) {
				s += 'var EISA_' + item + ' = ' + PART(C_TEMP('RUNTIME'), item) + ';\n';
			};
			return s;
		}();

		var generator = Generator(trees);
		var generatedSource = generator(enter);

		if(ast.debugQ){
			generatedSource = generatedSource.replace(/^\s*\/\*@LFC-DEBUG (\d+),(\d+)@\*\/.*$/gm, function(m, $1, $2){
				return getSource($1 - 0, $2 - 0).split('\n').filter(function(s){ return !!s })
					.map(function(s){ return STRIZE('[LFC-DEBUG]: ' + s) + ";" }).join('\n')
			})
		}

		var finalSource = enterText + 'return ' + generatedSource;
		var f = Function(C_TEMP('RUNTIME'), C_TEMP('INIT'), finalSource);
		return {
			func: f,
			source: finalSource,
			generatedSource: generatedSource,
			wrappedSource: 'function(' + [C_TEMP('RUNTIME'), C_TEMP('INIT')].join(',') + '){' + finalSource + '}'
		}
	};
コード例 #2
0
ファイル: compiler.js プロジェクト: roadlabs/eisa
		var enterText = "var undefined;\n" + function(){
			var s = '';
			for(var item in eisa.runtime) if(OWNS(eisa.runtime, item)) {
				s += 'var EISA_' + item + ' = ' + PART(C_TEMP('RUNTIME'), item) + ';\n';
			};
			return s;
		}();