src/ai/api/squirrel_export.awk
author truebrain
Thu, 28 Feb 2008 01:11:23 +0000
branchnoai
changeset 9803 c86d5834fb11
parent 9741 53c1c5850e01
child 9814 be51ea0adc29
permissions -rw-r--r--
(svn r12309) [NoAI] -Codechange: optimize a little bit (a very small little bit, but every bit counts :) ) (glx)
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     1
#
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     2
# Awk script to automatically generate the code needed
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     3
# to export the AI API to Squirrel.
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     4
#
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     5
# Note that arrays are 1 based...
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     6
#
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     7
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     8
# Simple insertion sort.
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
     9
function array_sort(ARRAY, ELEMENTS, temp, i, j) {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    10
	for (i = 2; i <= ELEMENTS; i++)
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    11
		for (j = i; ARRAY[j - 1] > ARRAY[j]; --j) {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    12
			temp = ARRAY[j]
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    13
			ARRAY[j] = ARRAY[j - 1]
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    14
			ARRAY[j - 1] = temp
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    15
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    16
	return
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    17
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    18
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    19
function dump_class_templates(name) {
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    20
	print "	template <> "       name " *GetParam(ForceType<"       name " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (" name " *)instance; }"
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    21
	print "	template <> "       name " &GetParam(ForceType<"       name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    22
	print "	template <> const " name " *GetParam(ForceType<const " name " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (" name " *)instance; }"
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    23
	print "	template <> const " name " &GetParam(ForceType<const " name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
9680
5ed7bbfd51c7 (svn r10629) [NoAI] -Fix: on returning a class instance which is NULL, do not make a wrapper SQ, but return a NULL pointer too
truelight
parents: 9679
diff changeset
    24
	print "	template <> int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" name "\", res, NULL, DefSQDestructorCallback<" name ">); return 1; }"
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    25
}
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    26
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    27
BEGIN {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    28
	enum_size = 0
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
    29
	enum_value_size = 0
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    30
	struct_size = 0
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    31
	method_size = 0
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
    32
	static_method_size = 0
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
    33
	virtual_class = "false"
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    34
	super_cls = ""
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    35
	cls = ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    36
	start_squirrel_define_on_next_line = "false"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    37
	cls_level = 0
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    38
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    39
9596
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    40
/@file/ {
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    41
	print "#include \"" $3 "\""
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    42
}
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    43
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    44
# Remove the old squirrel stuff
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    45
/#ifdef DEFINE_SQUIRREL_CLASS/ { squirrel_stuff = "true";  next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    46
/^#endif \/\* DEFINE_SQUIRREL_CLASS \*\// { if (squirrel_stuff == "true") { squirrel_stuff = "false"; next; } }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    47
{ if (squirrel_stuff == "true") next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    48
9587
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
    49
# Ignore forward declarations of classes
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
    50
/^(	*)class(.*);/ { next; }
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    51
# We only want to have public functions exported for now
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    52
/^(	*)class/     {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    53
	if (cls_level == 0) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    54
		public = "false"
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    55
		cls_param[0] = ""
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    56
		cls_param[1] = 1
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    57
		cls_param[2] = "x"
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    58
		cls = $2
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    59
		if (match($4, "public") || match($4, "protected") || match($4, "private")) {
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    60
			super_cls = $5
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    61
		} else {
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    62
			super_cls = $4
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
    63
		}
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    64
	} else if (cls_level == 1) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    65
		struct_size++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    66
		structs[struct_size] = cls "::" $2
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    67
	}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    68
	cls_level++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    69
	next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    70
}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    71
/^(	*)public/    { if (cls_level == 1) public = "true";  next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    72
/^(	*)protected/ { if (cls_level == 1) public = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    73
/^(	*)private/   { if (cls_level == 1) public = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    74
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    75
# Ignore the comments
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    76
/^#/             { next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    77
/\/\*.*\*\//     { comment = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    78
/\/\*/           { comment = "true";  next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    79
/\*\//           { comment = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    80
{ if (comment == "true") next }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    81
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    82
# We need to make specialized conversions for structs
9527
f709c97a5d9f (svn r9447) [NoAI] -Fix (r9446): commented out a little too much code, i.e. code that wasn't unused yet ;)
rubidium
parents: 9526
diff changeset
    83
/^(	*)struct/ {
f709c97a5d9f (svn r9447) [NoAI] -Fix (r9446): commented out a little too much code, i.e. code that wasn't unused yet ;)
rubidium
parents: 9526
diff changeset
    84
	cls_level++
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    85
	if (public == "false") next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    86
	if (cls_level != 1) next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    87
	struct_size++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    88
	structs[struct_size] = cls "::" $2
9527
f709c97a5d9f (svn r9447) [NoAI] -Fix (r9446): commented out a little too much code, i.e. code that wasn't unused yet ;)
rubidium
parents: 9526
diff changeset
    89
	next
f709c97a5d9f (svn r9447) [NoAI] -Fix (r9446): commented out a little too much code, i.e. code that wasn't unused yet ;)
rubidium
parents: 9526
diff changeset
    90
}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    91
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    92
# We need to make specialized conversions for enums
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    93
/^(	*)enum/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    94
	cls_level++
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    95
	if (public == "false") next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    96
	in_enum = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    97
	enum_size++
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    98
	enums[enum_size] = cls "::" $2
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    99
	next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   100
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   101
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   102
# Maybe the end of the class, if so we can start with the Squirrel export pretty soon
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   103
/};/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   104
	cls_level--
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   105
	if (cls_level != 0) {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   106
		in_enum = "false";
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   107
		next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   108
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   109
	if (cls == "") {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   110
		next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   111
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   112
	start_squirrel_define_on_next_line = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   113
	next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   114
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   115
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   116
# Empty/white lines. When we may do the Squirrel export, do that export.
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   117
/^([ 	]*)$/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   118
	if (start_squirrel_define_on_next_line == "false") next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   119
	spaces = "                                                               ";
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   120
	public = "false"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   121
	namespace_opened = "false"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   122
9596
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
   123
	print ""
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
   124
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   125
	# First check whether we have enums to print
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   126
	if (enum_size != 0) {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   127
		if (namespace_opened == "false") {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   128
			print "namespace SQConvert {"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   129
			namespace_opened = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   130
		}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   131
		print "	/* Allow enums to be used as Squirrel parameters */"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   132
		for (i = 1; i <= enum_size; i++) {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   133
			print "	template <> " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   134
			print "	template <> int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   135
			delete enums[i]
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   136
		}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   137
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   138
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   139
	# Then check whether we have structs/classes to print
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   140
	if (struct_size != 0) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   141
		if (namespace_opened == "false") {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   142
			print "namespace SQConvert {"
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   143
			namespace_opened = "true"
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   144
		}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   145
		print "	/* Allow inner classes/structs to be used as Squirrel parameters */"
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   146
		for (i = 1; i <= struct_size; i++) {
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
   147
			dump_class_templates(structs[i])
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   148
			delete structs[i]
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   149
		}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   150
	}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   151
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   152
	if (namespace_opened == "false") {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   153
		print "namespace SQConvert {"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   154
		namespace_opened = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   155
	} else {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   156
		print ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   157
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   158
	print "	/* Allow " cls " to be used as Squirrel parameter */"
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
   159
	dump_class_templates(cls)
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   160
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   161
	print "}; // namespace SQConvert"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   162
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   163
	print "";
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   164
	# Then do the registration functions of the class. */
9741
53c1c5850e01 (svn r12221) [NoAI] -Fix: Register functions are no _Register functions, and always on top of the sort list
truebrain
parents: 9681
diff changeset
   165
	print "void SQ" cls "_Register(Squirrel *engine) {"
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   166
	print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   167
	if (super_cls == "AIObject" || super_cls == "AIAbstractList::Valuator") {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   168
		print "	SQ" cls ".PreRegister(engine);"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   169
	} else {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   170
		print "	SQ" cls ".PreRegister(engine, \"" super_cls "\");"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   171
	}
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   172
	if (virtual_class == "false") {
9635
9ee82e091af7 (svn r10526) [NoAI] -Fix: a class with params for the constructor lost his instance when called from SQ (templates can be really useful ;))
truelight
parents: 9610
diff changeset
   173
		print "	SQ" cls ".AddConstructor<void (" cls "::*)(" cls_param[0] "), " cls_param[1]">(engine, \"" cls_param[2] "\");"
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   174
	}
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   175
	print ""
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   176
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   177
	# Enum values
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   178
	mlen = 0
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   179
	for (i = 1; i <= enum_value_size; i++) {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   180
		if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   181
	}
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   182
	for (i = 1; i <= enum_value_size; i++) {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   183
		print "	SQ" cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\""  enum_value[i] "\");"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   184
		delete enum_value[i]
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   185
	}
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   186
	if (enum_value_size != 0) print ""
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   187
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   188
	# Static methods
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   189
	mlen = 0
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   190
	for (i = 1; i <= static_method_size; i++) {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   191
		if (mlen <= length(static_methods[i, 0])) mlen = length(static_methods[i, 0])
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   192
	}
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   193
	for (i = 1; i <= static_method_size; i++) {
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   194
		print "	SQ" cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\""  static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   195
		delete static_methods[i]
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   196
	}
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   197
	if (static_method_size != 0) print ""
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   198
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   199
	if (virtual_class == "false") {
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   200
		# Non-static methods
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   201
		mlen = 0
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   202
		for (i = 1; i <= method_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   203
			if (mlen <= length(methods[i, 0])) mlen = length(methods[i, 0])
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   204
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   205
		for (i = 1; i <= method_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   206
			print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\""  methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   207
			delete methods[i]
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   208
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   209
		if (method_size != 0) print ""
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   210
	}
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   211
	print "	SQ" cls ".PostRegister(engine);"
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   212
	print "}"
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   213
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   214
	enum_size = 0
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   215
	enum_value_size = 0
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   216
	struct_size = 0
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   217
	method_size = 0
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   218
	static_method_size = 0
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   219
	virtual_class = "false"
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   220
	cls = ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   221
	start_squirrel_define_on_next_line = "false"
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   222
	cls_level = 0
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   223
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   224
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   225
# Skip non-public functions
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   226
{ if (public == "false") next }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   227
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   228
# Add enums
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   229
{
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   230
	if (in_enum == "true") {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   231
		enum_value_size++
9681
3997f1ce203a (svn r10630) [NoAI] -Fix: allow enums to not have a predefined value for Squirrel
truelight
parents: 9680
diff changeset
   232
		sub(",", "", $1)
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   233
		enum_value[enum_value_size] = $1
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   234
		next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   235
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   236
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   237
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   238
# Add a method to the list
9587
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
   239
/^.*\(.*\).*$/ {
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   240
	if (cls_level != 1) next
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9651
diff changeset
   241
	if (match($0, "~")) next
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   242
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   243
	is_static = match($0, "static")
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   244
	if (match($0, "virtual")) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   245
		virtual_class = "true"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   246
	}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   247
	gsub("virtual", "", $0)
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   248
	gsub("static", "", $0)
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   249
	gsub("const", "", $0)
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   250
	param_s = $0
9533
2c692ffdf5e4 (svn r9454) [NoAI] -Fix: remove mawk <-> gawk incompatabilities from the Squirrel export.
rubidium
parents: 9532
diff changeset
   251
	gsub("\\*", "", $0)
2c692ffdf5e4 (svn r9454) [NoAI] -Fix: remove mawk <-> gawk incompatabilities from the Squirrel export.
rubidium
parents: 9532
diff changeset
   252
	gsub("\\(.*", "", $0)
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   253
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   254
	sub(".*\\(", "", param_s)
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   255
	sub("\\).*", "", param_s)
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   256
9609
f0dbf5850145 (svn r9767) [NoAI] -Add: add support for params in the constructor (via C++ templates)
truelight
parents: 9596
diff changeset
   257
	funcname = $2
9677
96e8d3f0412d (svn r10616) [NoAI] -Fix: only see a method as constructors if they do not have an other function name
truelight
parents: 9674
diff changeset
   258
	if ($1 == cls && funcname == "") {
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   259
		cls_param[0] = param_s
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   260
		if (param_s == "") next
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   261
	} else if (funcname == "") next
9609
f0dbf5850145 (svn r9767) [NoAI] -Add: add support for params in the constructor (via C++ templates)
truelight
parents: 9596
diff changeset
   262
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   263
	split(param_s, params, ",")
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   264
	types = "x"
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   265
	for (len = 1; params[len] != ""; len++) {
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   266
		sub("^[ 	]*", "", params[len])
9594
5009a30f320a (svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
rubidium
parents: 9587
diff changeset
   267
		if (match(params[len], "\\*") || match(params[len], "&")) {
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   268
			if (match(params[len], "^char")) {
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   269
				types = types "s"
9651
6e2860c67455 (svn r10551) [NoAI] -Add: added SQ support for "void *"
truelight
parents: 9635
diff changeset
   270
			} else if (match(params[len], "^void")) {
6e2860c67455 (svn r10551) [NoAI] -Add: added SQ support for "void *"
truelight
parents: 9635
diff changeset
   271
				types = types "p"
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   272
			} else {
9583
c233c2897a45 (svn r9607) [NoAI] -Fix: instances should be 'x', not 'p' in SQ param list
truelight
parents: 9572
diff changeset
   273
				types = types "x"
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   274
			}
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   275
		} else if (match(params[len], "^bool")) {
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   276
			types = types "b"
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   277
		} else {
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   278
			types = types "i"
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   279
		}
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   280
	}
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   281
9677
96e8d3f0412d (svn r10616) [NoAI] -Fix: only see a method as constructors if they do not have an other function name
truelight
parents: 9674
diff changeset
   282
	if ($1 == cls && funcname == "") {
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   283
		cls_param[1] = len;
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   284
		cls_param[2] = types;
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   285
	} else if (is_static) {
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   286
		static_method_size++
9542
fccf685f68ea (svn r9464) [NoAI] -Fix: make squirrel export script work with gawk again (silly stuff)
truelight
parents: 9541
diff changeset
   287
		static_methods[static_method_size, 0] = funcname
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   288
		static_methods[static_method_size, 1] = len
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   289
		static_methods[static_method_size, 2] = types
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   290
	} else {
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   291
		method_size++
9542
fccf685f68ea (svn r9464) [NoAI] -Fix: make squirrel export script work with gawk again (silly stuff)
truelight
parents: 9541
diff changeset
   292
		methods[method_size, 0] = funcname
9541
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   293
		methods[method_size, 1] = len
4bb34cea7fad (svn r9463) [NoAI] -Codechange: update squirrel export script to generate the correct amount and type of parameters, so that can be checked.
rubidium
parents: 9533
diff changeset
   294
		methods[method_size, 2] = types
9532
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   295
	}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   296
	next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   297
}