Merge: contrib/header_static: a cog in the toolchains to generate Objcwrapper
authorJean Privat <jean@pryen.org>
Thu, 28 May 2015 00:18:39 +0000 (20:18 -0400)
committerJean Privat <jean@pryen.org>
Thu, 28 May 2015 00:18:39 +0000 (20:18 -0400)
### Filters preprocessed C-like header files to remove static code and keep their signatures.

This tool is used in the process of parsing header files to extract
information on the declared services (the functions and structures).
This information is then used to generate bindings for Nit code
to access these services.

The C header sometimes contains static code. It deletes static code of
headers, but keep their signatures. This tool is an extension of
header_keeper. It searches the keyword static to identify
the static code, and ignore the code into their brackets. The result is
printed to sdtout.

~~~sh
cat Pre-Processed/CGGeometry.h | header_static Pre-Processed/CGGeometry.h > Pre-Processed/static_header.h
~~~

This module can also be used as a library.
The main service is the method `header_static`

Pull-Request: #1396
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>

1  2 
lib/serialization/serialization.nit

@@@ -146,6 -146,12 +146,12 @@@ redef interface Objec
        #
        # Used to determine if an object has already been serialized.
        fun is_same_serialized(other: nullable Object): Bool do return is_same_instance(other)
+       # Hash value use for serialization
+       #
+       # Used in combination with `is_same_serialized`. If two objects are the same
+       # in a serialization context, they must have the same `serialization_hash`.
+       fun serialization_hash: Int do return object_id
  end
  
  # Instances of this class are not delayed and instead serialized immediately
@@@ -164,37 -170,3 +170,37 @@@ redef class NativeString super DirectSe
  redef class String super DirectSerializable end
  redef class SimpleCollection[E] super Serializable end
  redef class Map[K, V] super Serializable end
 +
 +redef class Couple[F, S]
 +      super Serializable
 +
 +      redef init from_deserializer(v)
 +      do
 +              v.notify_of_creation self
 +              var first = v.deserialize_attribute("first")
 +              var second = v.deserialize_attribute("second")
 +              init(first, second)
 +      end
 +
 +      redef fun core_serialize_to(v)
 +      do
 +              v.serialize_attribute("first", first)
 +              v.serialize_attribute("second", second)
 +      end
 +end
 +
 +redef class Container[E]
 +      super Serializable
 +
 +      redef init from_deserializer(v)
 +      do
 +              v.notify_of_creation self
 +              var item = v.deserialize_attribute("item")
 +              init item
 +      end
 +
 +      redef fun core_serialize_to(v)
 +      do
 +              v.serialize_attribute("item", first)
 +      end
 +end