src/ai/api/squirrel_export.awk
author truelight
Wed, 02 May 2007 12:56:01 +0000
branchnoai
changeset 9610 5cebcd43a1ec
parent 9609 f0dbf5850145
child 9635 9ee82e091af7
permissions -rw-r--r--
(svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
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; }"
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
    24
}
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
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    26
BEGIN {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    27
	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
    28
	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
    29
	struct_size = 0
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    30
	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
    31
	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
    32
	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
    33
	super_cls = ""
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    34
	cls = ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    35
	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
    36
	cls_level = 0
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    37
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    38
9596
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    39
/@file/ {
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    40
	print "#include \"" $3 "\""
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    41
}
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
    42
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    43
# 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
    44
/#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
    45
/^#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
    46
{ 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
    47
9587
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
    48
# Ignore forward declarations of classes
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
    49
/^(	*)class(.*);/ { next; }
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    50
# 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
    51
/^(	*)class/     {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    52
	if (cls_level == 0) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    53
		public = "false"
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    54
		cls_param[0] = ""
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    55
		cls_param[1] = 1
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
    56
		cls_param[2] = "x"
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    57
		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
    58
		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
    59
			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
    60
		} 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
    61
			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
    62
		}
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    63
	} else if (cls_level == 1) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    64
		struct_size++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    65
		structs[struct_size] = cls "::" $2
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    66
	}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    67
	cls_level++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    68
	next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    69
}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    70
/^(	*)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
    71
/^(	*)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
    72
/^(	*)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
    73
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    74
# Ignore the comments
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    75
/^#/             { next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    76
/\/\*.*\*\//     { comment = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    77
/\/\*/           { comment = "true";  next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    78
/\*\//           { comment = "false"; next; }
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    79
{ 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
    80
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    81
# 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
    82
/^(	*)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
    83
	cls_level++
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    84
	if (public == "false") next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    85
	if (cls_level != 1) next
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    86
	struct_size++
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
    87
	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
    88
	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
    89
}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    90
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    91
# 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
    92
/^(	*)enum/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    93
	cls_level++
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    94
	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
    95
	in_enum = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    96
	enum_size++
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    97
	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
    98
	next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
    99
}
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
# 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
   102
/};/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   103
	cls_level--
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   104
	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
   105
		in_enum = "false";
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   106
		next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   107
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   108
	if (cls == "") {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   109
		next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   110
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   111
	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
   112
	next;
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   113
}
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
# 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
   116
/^([ 	]*)$/ {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   117
	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
   118
	spaces = "                                                               ";
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   119
	public = "false"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   120
	namespace_opened = "false"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   121
9596
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
   122
	print ""
8af5a1399842 (svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents: 9594
diff changeset
   123
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   124
	# 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
   125
	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
   126
		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
   127
			print "namespace SQConvert {"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   128
			namespace_opened = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   129
		}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   130
		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
   131
		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
   132
			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
   133
			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
   134
			delete enums[i]
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   135
		}
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
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   138
	# 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
   139
	if (struct_size != 0) {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   140
		if (namespace_opened == "false") {
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   141
			print "namespace SQConvert {"
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   142
			namespace_opened = "true"
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   143
		}
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   144
		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
   145
		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
   146
			dump_class_templates(structs[i])
9567
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   147
			delete structs[i]
d73c84a7875d (svn r9509) [NoAI] -Add: inner-class/struct support for parameters.
rubidium
parents: 9547
diff changeset
   148
		}
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
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   151
	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
   152
		print "namespace SQConvert {"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   153
		namespace_opened = "true"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   154
	} else {
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   155
		print ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   156
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   157
	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
   158
	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
   159
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   160
	print "}; // namespace SQConvert"
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   161
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   162
	if (virtual_class == "false") {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   163
		print "";
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   164
		# Then do the registration functions of the class. */
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   165
		print "void SQ" cls "Register(Squirrel *engine) {"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   166
		print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
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
   167
		if (super_cls == "AIObject" || super_cls == "AIAbstractList::Valuator") {
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
   168
			print "	SQ" cls ".PreRegister(engine);"
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
   169
		} 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
   170
			print "	SQ" cls ".PreRegister(engine, \"" super_cls "\");"
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
   171
		}
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   172
		print "	SQ" cls ".AddConstructor<void (" cls "::*)(" cls_param[0] ")>(engine, " cls_param[1] ", \"" cls_param[2] "\");"
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   173
		print ""
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   174
9572
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   175
		# Enum values
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   176
		mlen = 0
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   177
		for (i = 1; i <= enum_value_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   178
			if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   179
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   180
		for (i = 1; i <= enum_value_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   181
			print "	SQ" cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\""  enum_value[i] "\");"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   182
			delete enum_value[i]
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   183
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   184
		if (enum_value_size != 0) print ""
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   185
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   186
		# Static methods
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   187
		mlen = 0
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   188
		for (i = 1; i <= static_method_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   189
			if (mlen <= length(static_methods[i, 0])) mlen = length(static_methods[i, 0])
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   190
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   191
		for (i = 1; i <= static_method_size; i++) {
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   192
			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] "\");"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   193
			delete static_methods[i]
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   194
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   195
		if (static_method_size != 0) print ""
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   196
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   197
		# Non-static methods
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   198
		mlen = 0
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   199
		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
   200
			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
   201
		}
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
			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
   204
			delete methods[i]
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   205
		}
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   206
		if (method_size != 0) print ""
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   207
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   208
		print "	SQ" cls ".PostRegister(engine);"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   209
		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
	}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   211
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
   212
	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
   213
	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
   214
	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
   215
	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
   216
	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
   217
	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
   218
	cls = ""
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   219
	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
   220
	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
   221
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   222
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   223
# 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
   224
{ 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
   225
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   226
# Add enums
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
	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
   229
		enum_value_size++
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   230
		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
   231
		next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   232
	}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   233
}
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   234
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   235
# Add a method to the list
9587
b0716d4c0128 (svn r9612) [NoAI] -Fix: ignore forward class defines in squirrel_export
truelight
parents: 9583
diff changeset
   236
/^.*\(.*\).*$/ {
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   237
	if (cls_level != 1) 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
   238
539c48d64eea (svn r9453) [NoAI] -Codechange: make a difference between static and non-static methods in the squirrel export script.
rubidium
parents: 9527
diff changeset
   239
	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
   240
	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
   241
		virtual_class = "true"
6a78470c53f3 (svn r9535) [NoAI] -Codechange: don't export virtual classes, only their class signature for parameters.
rubidium
parents: 9567
diff changeset
   242
	}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   243
	gsub("virtual", "", $0)
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   244
	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
   245
	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
   246
	param_s = $0
9533
2c692ffdf5e4 (svn r9454) [NoAI] -Fix: remove mawk <-> gawk incompatabilities from the Squirrel export.
rubidium
parents: 9532
diff changeset
   247
	gsub("\\*", "", $0)
2c692ffdf5e4 (svn r9454) [NoAI] -Fix: remove mawk <-> gawk incompatabilities from the Squirrel export.
rubidium
parents: 9532
diff changeset
   248
	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
   249
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
	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
   251
	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
   252
9609
f0dbf5850145 (svn r9767) [NoAI] -Add: add support for params in the constructor (via C++ templates)
truelight
parents: 9596
diff changeset
   253
	funcname = $2
f0dbf5850145 (svn r9767) [NoAI] -Add: add support for params in the constructor (via C++ templates)
truelight
parents: 9596
diff changeset
   254
	if ($1 == cls) {
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   255
		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
   256
		if (param_s == "") next
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   257
	} 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
   258
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
   259
	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
   260
	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
   261
	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
   262
		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
   263
		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
   264
			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
   265
				types = types "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
   266
			} else {
9583
c233c2897a45 (svn r9607) [NoAI] -Fix: instances should be 'x', not 'p' in SQ param list
truelight
parents: 9572
diff changeset
   267
				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
   268
			}
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
		} 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
   270
			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
   271
		} 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
   272
			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
   273
		}
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
9610
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   276
	if ($1 == cls) {
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   277
		cls_param[1] = len;
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   278
		cls_param[2] = types;
5cebcd43a1ec (svn r9768) [NoAI] -Fix: check if the amount of params for constructor are correct
truelight
parents: 9609
diff changeset
   279
	} 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
   280
		static_method_size++
9542
fccf685f68ea (svn r9464) [NoAI] -Fix: make squirrel export script work with gawk again (silly stuff)
truelight
parents: 9541
diff changeset
   281
		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
   282
		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
   283
		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
   284
	} 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
   285
		method_size++
9542
fccf685f68ea (svn r9464) [NoAI] -Fix: make squirrel export script work with gawk again (silly stuff)
truelight
parents: 9541
diff changeset
   286
		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
   287
		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
   288
		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
   289
	}
9526
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   290
	next
a4ad60ba03be (svn r9446) [NoAI] -Add: simple script to make changing/adding classes to export a little simpler.
rubidium
parents:
diff changeset
   291
}