// File: /workspace/github_c_makefile_star2_O3/theovosse[P]llgen/llgen.c
// Function: PrintFirstSymbols
static void PrintFirstSymbols(TREE ofirsts, void (*cond)(Boolean, int), int indent, Boolean positive, Boolean generateCode, TREE *symbols, int lineNr, Boolean emptyFollow, Boolean* usesLA) {
	TREE common = ofirsts; // !!! Intersection2(ofirsts, oneOf); !!! See KillTree at end and emptyFollow

	if (generateCode) {
        cond(true, indent);
        fprintf(outputFile, "%stokenInCommon(%scurrSymbol, ", (positive? "": "!"), targetLanguage->owner);
		// !!! if (emptyFollow) {
		// 	fputs("uniteTokenSets(", outputFile);
        //     if (targetLanguage->requiresLocalLTSetStorage) {
        //         targetLanguage->pointerToArray(outputFile, "ltSet", -1);
        //         fputs(", ", outputFile);
        //     }
        //     fputs("follow, ", outputFile);
		// }
        TokenSetName2(common);
		// !!! if (emptyFollow) {
        //     fputs(")", outputFile);
        // }
        fputs(")", outputFile);
        cond(false, indent);
		if (common == NULL || (symbols != NULL && NotEmptyIntersection(*symbols, common))) {
			TREE intersection = Intersection(*symbols, common);
			fputs(" /* Not an LL(1)-grammar: first symbols ", outputFile);
			PrintTree(outputFile, intersection);
			fputs(" */", outputFile);
			KillTree(intersection, NULL);
			fprintf(stderr, "%s:%d: not an LL(1)-grammar (first symbols)\n", inputFileName, lineNr);
			notLLError = true;
		}
		if (HasProperty("showfirsts")) {
			fputs(" /* firsts: ", outputFile);
			PrintTree(outputFile, ofirsts);
			fputs(" */", outputFile);
		}
		if (symbols != NULL) {
			Unite(symbols, common);
		}
	} else {
		CreateTokenSet2(outputFile, common);
		// !!! if (emptyFollow) {
		// 	*usesLA = true;
		// }
	}
	// !!! KillTree(common, NULL);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
testw %r8w, %r8w
je 0x9418
movq %r9, %rbx
movl %ecx, %r13d
movl %edx, %r12d
movq %rsi, %r15
movl 0x40(%rsp), %ebp
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
movl %edx, %esi
callq *%r15
movq 0x107da(%rip), %rdi     # 0x19ae8
testw %r13w, %r13w
leaq 0xa471(%rip), %rax      # 0x1378a
leaq 0x7e98(%rip), %rdx      # 0x111b8
cmoveq %rax, %rdx
movq 0xfe55(%rip), %rax      # 0x19180
movq 0x38(%rax), %rcx
leaq 0x8930(%rip), %rsi      # 0x11c66
xorl %eax, %eax
callq 0x3160
movq %r14, %rdi
callq 0x9556
movq 0x1079c(%rip), %rsi     # 0x19ae8
leaq 0x9b2c(%rip), %rdi      # 0x12e7f
callq 0x3110
xorl %edi, %edi
movl %r12d, %esi
callq *%r15
testq %r14, %r14
je 0x9444
testq %rbx, %rbx
je 0x93b4
movq (%rbx), %rdi
callq 0xbbcb
testq %rax, %rax
je 0x93b4
movq %rax, %r15
leaq -0x554b(%rip), %r12     # 0x3e3a
movq %r15, %rdi
callq 0xbc07
movq %r14, %rdi
movq %rax, %rsi
movq %r12, %rdx
callq 0xbca0
testq %rax, %rax
jne 0x944b
movq %r15, %rdi
callq 0xbc13
movq %rax, %r15
testq %rax, %rax
jne 0x9385
leaq 0x885c(%rip), %rdi      # 0x11c17
callq 0x628f
testw %ax, %ax
je 0x93fa
movq 0x1071c(%rip), %rsi     # 0x19ae8
leaq 0x8908(%rip), %rdi      # 0x11cdb
callq 0x3110
movq 0x10709(%rip), %rdi     # 0x19ae8
movq %r14, %rsi
callq 0x94e0
movq 0x106fa(%rip), %rsi     # 0x19ae8
leaq 0xa46b(%rip), %rdi      # 0x13860
callq 0x3110
testq %rbx, %rbx
je 0x9435
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x6655
movq 0x106c9(%rip), %rdi     # 0x19ae8
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x95ba
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rbx), %rdi
xorl %esi, %esi
jmp 0x9451
movq (%rbx), %rdi
movq %r14, %rsi
callq 0x9a2c
movq %rax, %rdi
movl %ebp, %esi
callq 0x36a9
jmp 0x93b4