private final BytecodeEmitter parseLine(BytecodeEmitter asm, String line) throws Exception {		
		line = parseOutComment(line);
		
		if(line.length() > 0) {
		
			int opcodeIndex = line.indexOf(' ');
			
			if(opcodeIndex > -1) {
				String opcode = line.substring(0, opcodeIndex);
				Opcode o = opcodes.get(opcode.toUpperCase());
				if(o==null) {
					throw new LeolaRuntimeException("Unknown opcode: " + opcode);
				}
				
				String[] args = line.contains("\"") ? new String[] {line.substring(opcodeIndex)} 
									: line.substring(opcodeIndex).split(",");
				for(int i = 0; i < args.length; i++) args[i] = args[i].trim();
				
				o.invoke(asm, args);
			}
			/* label */
			else if (line.startsWith(":")) {
				asm.label(line.substring(1));
			}
			else {
				Opcode o = opcodes.get(line.toUpperCase());
				if(o==null) {
					throw new LeolaRuntimeException("Unknown opcode: " + line);
				}
				
				o.invoke(asm);
			}
		}
		
		return asm.peek();
	}