#!/usr/local/bin/perl
+
+#
+# Project: libFIRM
+# File name: ir/tools/remove_cpp_commands.perl
+# Purpose:
+# Author: Goetz Lindenmaier
+# Modified by:
+# Created: 8.2002
+# CVS-ID: $Id$
+# Copyright: (c) 2002-2003 Universität Karlsruhe
+# Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
+#
+
+# This is necessary until CRECODER is integrated with the preprocessor.
#
# Take a C header file and remove all preprocessor commands.
# Wrap all typedefs with a preprocessor guard,
print TDF "#define INLINE\n";
print TDF "#define FILE int *\n";
print TDF "#ifndef MYTYPEDEFS\n#define MYTYPEDEFS\n";
+#print TDF "#undef __cplusplus\n";
print TDF "typedef unsigned long size_t;\n";
#print TDF "typedef enum { false = 0, true = 1 } bool;\n"; geht nicht, false und true JAVA Schluesselwoerter
print TDF "typedef int bool;\n";
$scndlastline = "";
$lastline = "";
+$eat = 0;
+$multiline = 0;
+
foreach $line (@lines) {
- if (($line =~ /^\#/) ) {
+ if ($line =~ /\#ifdef __cplusplus/) {
+# There is extern "C" in firm.h, guarded by #ifdef __cplusplus
+# crecoder does not grok the extern "C", so remove thses three lines.
+ $eat = 2;
+ } elsif ($eat > 0) {
+ $eat = $eat -1;
+ } elsif ($multiline > 0) {
+ # this line connects a previous one, kill it
+ if ($line =~ /\\$/) {
+ $multiline = 1;
+ } else {
+ $multiline = 0;
+ }
+ } elsif ($line =~ /^\#/) {
# eat the line
$scndlastline = $lastline;
$lastline = $line;
+ if ($line =~ /\\$/) {
+ $multiline = 1;
+ } else {
+ $multiline = 0;
+ }
} elsif ($openbracket == 1) {
print TDF "$line";
if ((index($line, "}") > -1)) {